Apache Flink-এ Tumbling, Sliding, এবং Session উইন্ডো খুবই গুরুত্বপূর্ণ, কারণ তারা স্ট্রিম ডেটা প্রসেসিংয়ে ডেটাকে গ্রুপ করে এবং নির্দিষ্ট সময় বা ইভেন্টের ভিত্তিতে ডেটার উপর অপারেশন চালাতে সাহায্য করে। নিচে প্রতিটি উইন্ডোর উদাহরণসহ ব্যাখ্যা দেয়া হলো।
Tumbling Windows হলো একটি ফিক্সড-সাইজ উইন্ডো যা নির্দিষ্ট সময়ের জন্য ডেটা গ্রুপ করে এবং ওভারল্যাপ ছাড়াই কাজ করে। প্রতিটি উইন্ডো একটি নির্দিষ্ট সময় পর বন্ধ হয় এবং পরবর্তী উইন্ডো শুরু হয়।
ধরা যাক, আমাদের একটি স্ট্রিম আছে যেখানে আমরা প্রতি ১০ সেকেন্ডে ডেটা প্রসেস করতে চাই। আমরা TumblingEventTimeWindows
ব্যবহার করে প্রতিটি ১০ সেকেন্ডের উইন্ডোতে ডেটা গ্রুপ করবো।
import org.apache.flink.streaming.api.windowing.time.Time;
import org.apache.flink.streaming.api.windowing.windows.TimeWindow;
import org.apache.flink.streaming.api.datastream.DataStream;
import org.apache.flink.streaming.api.environment.StreamExecutionEnvironment;
import org.apache.flink.streaming.api.windowing.assigners.TumblingEventTimeWindows;
public class TumblingWindowExample {
public static void main(String[] args) throws Exception {
// Execution Environment তৈরি করা
StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();
// Data Stream পড়া
DataStream<String> stream = env.socketTextStream("localhost", 9999);
// Tumbling Window ব্যবহার করে প্রসেসিং
stream
.map(value -> new Event(value))
.keyBy(event -> event.getKey())
.window(TumblingEventTimeWindows.of(Time.seconds(10))) // ১০ সেকেন্ডের উইন্ডো
.sum("value") // 'value' ফিল্ডের উপর অপারেশন
.print();
env.execute("Tumbling Window Example");
}
}
TumblingEventTimeWindows.of(Time.seconds(10))
দিয়ে ১০ সেকেন্ডের একটি ফিক্সড উইন্ডো তৈরি করা হয়েছে।Sliding Windows হলো এমন উইন্ডো যা একটি নির্দিষ্ট ইন্টারভাল ধরে উইন্ডো স্লাইড করে। এতে উইন্ডোগুলো ওভারল্যাপ করতে পারে। Sliding উইন্ডোতে একটি উইন্ডোর দৈর্ঘ্য এবং স্লাইড করার ইন্টারভাল নির্ধারণ করতে হয়।
ধরা যাক, আমাদের ১৫ সেকেন্ডের একটি উইন্ডো দরকার যা প্রতি ৫ সেকেন্ডে স্লাইড করবে।
import org.apache.flink.streaming.api.windowing.time.Time;
import org.apache.flink.streaming.api.windowing.assigners.SlidingEventTimeWindows;
public class SlidingWindowExample {
public static void main(String[] args) throws Exception {
// Execution Environment তৈরি করা
StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();
// Data Stream পড়া
DataStream<String> stream = env.socketTextStream("localhost", 9999);
// Sliding Window ব্যবহার করে প্রসেসিং
stream
.map(value -> new Event(value))
.keyBy(event -> event.getKey())
.window(SlidingEventTimeWindows.of(Time.seconds(15), Time.seconds(5))) // ১৫ সেকেন্ডের উইন্ডো, ৫ সেকেন্ডের স্লাইড
.sum("value") // 'value' ফিল্ডের উপর অপারেশন
.print();
env.execute("Sliding Window Example");
}
}
SlidingEventTimeWindows.of(Time.seconds(15), Time.seconds(5))
দিয়ে ১৫ সেকেন্ডের উইন্ডো তৈরি করা হয়েছে, যা প্রতি ৫ সেকেন্ডে স্লাইড করে।Session Windows হলো এমন উইন্ডো যা ইভেন্টের inactivity gap বা session gap এর উপর নির্ভর করে। দুটি ইভেন্টের মধ্যে একটি নির্দিষ্ট সময়ের বেশি গ্যাপ থাকলে নতুন উইন্ডো শুরু হয়।
ধরা যাক, আমাদের একটি স্ট্রিম রয়েছে এবং আমরা চাই যে যদি দুটি ইভেন্টের মধ্যে ৩০ সেকেন্ডের বেশি গ্যাপ থাকে, তাহলে একটি নতুন সেশন উইন্ডো শুরু হবে।
import org.apache.flink.streaming.api.windowing.assigners.EventTimeSessionWindows;
public class SessionWindowExample {
public static void main(String[] args) throws Exception {
// Execution Environment তৈরি করা
StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();
// Data Stream পড়া
DataStream<String> stream = env.socketTextStream("localhost", 9999);
// Session Window ব্যবহার করে প্রসেসিং
stream
.map(value -> new Event(value))
.keyBy(event -> event.getKey())
.window(EventTimeSessionWindows.withGap(Time.seconds(30))) // ৩০ সেকেন্ডের সেশন গ্যাপ
.sum("value") // 'value' ফিল্ডের উপর অপারেশন
.print();
env.execute("Session Window Example");
}
}
EventTimeSessionWindows.withGap(Time.seconds(30))
ব্যবহার করে ৩০ সেকেন্ডের inactivity gap ভিত্তিতে সেশন উইন্ডো তৈরি করা হয়েছে।এই উইন্ডো মেকানিজমগুলো স্ট্রিম ডেটা প্রসেসিং এবং real-time analytics অ্যাপ্লিকেশনের জন্য অত্যন্ত কার্যকরী, যা Flink-কে একটি শক্তিশালী স্ট্রিম প্রসেসিং টুল হিসেবে প্রমাণ করে।
আরও দেখুন...